perm filename DOC1[DOC,BGB] blob
sn#097093 filedate 1974-04-15 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00022 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 ~I0,0λ10JLFA
C00007 00003 ~I0,0λ15FA
C00009 00004 ~I0,0P1λ13FA
C00013 00005 1.7 Control, Meta, and Meta-Control Keys.
C00017 00006 1.12 The Extended Command Scanner.
C00019 00007 1.13 The Stack.
C00023 00008 1.16 Making a Cube Explicitly.
C00027 00009 1.18 Text Commands of GEOMED 1973.
C00031 00010 ~I0,0P7λ13FA
C00033 00011 2.3 Soma Cubes
C00035 00012 2.4 The Platonic Solids.
C00037 00013 2.5 A Knot.
C00039 00014 2.8 The Pulgas Water Temple.
C00041 00015 2.9 Cross-Eyed Stereo Pairs.
C00043 00016 2.10 Video Synthesis.
C00044 00017 ~λ13P14JUFA
C00046 00018 ~I0,0λ13FA
C00049 00019 3.1 EUCLIDEAN TRANSFORMATIONS.
C00053 00020 3.2 STRENGTHS OF TRANSFORMATION.
C00056 00021 3.3 EUCLIDEAN SWITCHES.
C00060 00022 ~JAFA
C00064 ENDMK
C⊗;
~I0,0;λ10;JL;FA
STANFORD ARTIFICIAL INTELLIGENCE LABORATORY ~JRF.APRIL 1974
~JLFAOPERATING NOTE 68.2 ~JRF.GEOMED DOCUMENTATION
~JLFAMEMO AIM-232
~JLFACOMPUTER SCIENCE DEPARTMENT REPORT NO. CS-414
~L0,400;JCFB GEOMED - A GEOMETRIC EDITOR.
~L0,300;JCFB Bruce g. Baumgart
~L0,0;JA;FA
ABSTRACT:
~JUFA GEOMED is a system for doing 3-D geometric modeling; used
from a keyboard, it is an interactive drawing program; used as a
package of SAIL or LISP accessible subroutines, it is a graphics
language. With GEOMED, arbitrary polyhedra can be contructed; moved
about and viewed in perspective with hidden lines eliminated. In
addition to polyhedra; camera and image models are provided so that
simulators relevant to computer vision, problem solving, and
animation may be constructed.
~L0,-650;JUFA
This research was supported in part by the Advanced Research
Projects Agency of the Office of the Secretary of Defense under
Contract DAHC15-73-C-0435. The views and conclusions contained in
this document are those of the author and should not be interpreted
as necessarily representing the official policies, either expressed
or implied, of the Advanced Research Projects Agency or the United
States Government.
~I0,0;λ15;FA
~JC;FBCONTENTS.
~JCFBGEOMED AS AN INTERACTIVE DRAWING PROGRAM.
~JA;FB
1.0 PRIMER.
2.0 EXAMPLES.
3.0 GEOMETRIC COMMANDS.
4.0 TOPOLOGICAL COMMANDS.
5.0 INPUT/OUTPUT COMMANDS.
6.0 EDITOR CONTROL COMMANDS.
7.0 DISPLAY CONTROL COMMANDS.
8.0 COMMAND SUMMARY BY LEXICAL ORDER.
~H2;X1.2;L0,-400;*ARM.PLT;FA
~I0,0;P1;λ13;FA
~JC;FA SECTION 1
~JC;FBPRIMER
~JU;FA
1.1 Purpose.
GEOMED is for making drawings, synthetic video images, and
3-D geometric models for the sake of computer vision.
1.2 Running GEOMED.
The system copy of GEOMED is started by typing "R GEOMED"
carriage return at a CRT display console (rather than at a video
console). The program will display a rectangle, type an asterisk and
await single character commands. Typing additional carriage returns
will yield more asterisks showing that GEOMED is alive and listening.
1.3 Instant Cube.
Typing the character "∞", calls a macro that makes a cube.
Adjust the pots on the display console so that the cube looks right.
1.4 Translation.
~JA;λ5;F.
Type the character ":" to move the cube right (positive x axis).
Type the character ";" to move the cube left (negative x axis).
Type the character ")" to move the cube up (positive y axis).
Type the character "(" to move the cube down (negative y axis).
Type the character "*" to move the cube nearer (positive z axis).
Type the character "-" to move the cube away (negative z axis).
~JU;λ13;F.
Clearly these command characters are not mnemonics, they
were chosen because they do not require the TOP key and are
conveniently grouped in pairs under one's right hand.
1.5 Strength of Translation.
The distance the cube is moved on each command is called the
strength of translation or TDEL. The value of TDEL is displayed in
the upper right corner of the screen and is initially one foot. The
strength of translation is halved by typing the command character "/"
or doubled by typing "\".
1.6 World Frame of Reference.
The direction the cube moved was with respect to the world
frame of reference which is a right handed coordinate system. The
initial camera is positioned looking down the Z axis towards the world
origin. The world origin is in the center of the display screen a
simulated sixteen feet away; and the positive world X axis is to your
right; and the positive world Y axis is upwards.
1.7 Control, Meta, and Meta-Control Keys.
Notice that the Stanford A.I. keyboard has four "shift" keys
labeled SHIFT, TOP, META & CONTROL. SHIFT only determines whether an
alphabetic letter is upper or lower case; GEOMED converts lower case
letters into upper so that the SHIFT key has no effect. The TOP key
allows two ASCII character codes to be on each physical key; this
doubling up on the physical keys is not important to GEOMED since
"TOP-E" can always be referred to as "@". Finally, of great
importance, the CONTROL and META keys add two extra bits to the 7-bit
ASCII code, so that a 9-bit character is formed. In this document
the characters "α", "β" and "ε" will be used as prefix abbreviations
for CONTROL, META and META-CONTROL keying of a character.
Furthermore, the command scanner accepts the characters "α", "β"
and "ε" as prefix modifiers that will add the appropriate control and
meta bits to the next character typed.
1.8 Question Mark "?" Prefix.
Typing the question mark character "?" followed by any
character will type a one line reminder of what commands are invoked
by that character.
1.9 Rotation.
The rotation command characters are the same as for
translation except you must hold the CONTROL key down or prefix the
command with an "α". Try rotating the instant cube about the X-axis
with "α:". The positive direction of rotation is counter-clockwise.
The negative direction of rotation is clockwise.
1.10 Strength of Rotation.
The strength of rotation is named RDEL. The value of RDEL is
displayed in two formats in the upper right hand corner of the
screen: as a pi fraction and in degrees, minutes, seconds. The
initial value of RDEL is π/4, 45 degrees. Analogous to translation,
the strength of rotation is halved or doubled by "α/" and "α\"
respectively.
1.11 Rotation Default.
Since a sequence of rotations is quite common, there is a way
to make the CTRL key be sticky. The usual Euclidean transformation
default is translation world frame; but after typing the "@" command
character, the Euclidean default is rotation world frame. Translation
default is restored by typing "!". The state of the Euclidean
transformation default is also displayed in the status in the upper
right hand corner of the screen. (The "≡" command disables the status
display; "≡" toggles).
1.12 The Extended Command Scanner.
The X-commands are executed by typing "X" followed by the first
three letters of a mnemonic (further letters are ignored) followed by
any necessary arguments. The command is terminated by a RETURN. The
arguments may be separated by any reasonable delimiters: space,
comma, etc. The following three "X" commands provide easy creation
of simple polyhedra:
X CUBE <DX width>,<DY height>,<DZ depth>
X BALL <radius>,<M longitudes>,<N latitudes>
X CYLN <radius>,<N sides>,<DZ length>
The CUBE command makes a right rectangular prism with width,
height and depth as given. The BALL command makes a polyhedron that
approximates a sphere. The CYLN command makes a right prism that
approximates a circular cylinder.
~L0,-250;H2;X1.2;*FIG1;X1.0;F.
1.13 The Stack.
GEOMED commands take their arguments from and leave their
results in a push down stack of bodies, faces, edges and vertices.
The contents of the stack are displayed on the left hand side of the
display screen. Every kind of node has a default print identifier,
for the first body created a `B1' is displayed in the stack. Making a
second cube will push a `B2' into the stack. To retrieve `B1' use the
"↑" stack pop command or the "α↑" stack rotate up or "α↓" stack rotate down
or "↔" the swap top of stack command. The "↓" command pushs the stack
down and places in the new top the entity that was previously top of stack.
1.14 The Face, Edge and Vertex Rings.
A polyhedron consists of three circular double linked lists
(called rings); there is a ring of faces, a ring of edges and a ring
of vertices. The head of each ring is the body node. The rings can be
traveled by using the commands "<" and ">" to go forwards and back
through the face ring, the commands "≤" and "≥" for the edge ring, and
the commands "∨" and "∧" for the vertex ring. Notice that when a
face, edge or vertex node is in the top of the stack the
corresponding entity is intensified in the drawing.
1.15 Hidden Line Elimination.
Typing ALT-MODE causes your drawing to be displayed with its
hidden lines eliminated;
as is illustrated by the two pictures of a log cabin in the woods.
To stay in hidden line display mode use the
"_" underbar command; the "β_" returns the display mode default to
display all the lines. The hidden line eliminator, named OCCULT, does
not display concave faces correctly; and for the
sake of speed it does not check for them. The faces of a
polyhedra can be forced convex by applying the "$" command to a body
or to a face.
~X0.60;
H1;L-315,-575;*HIDE1.PLT;
H2;L315,-575;*HIDE2.PLT;X1.0;F.
1.16 Making a Cube Explicitly.
After "∞" and "X CUBE", a third way to draw a cube will be
given to illustrate the primitive topology commands. Starting with a
fresh copy of GEOMED, type the command letters in the second column
to get the advertised results:
~λ5;JA;F.
1. V Vertex body creation.
2. :) Position the vertex into the first quadrant.
3. S;; Make an edge and vertex and move left.
4. S(( Edge vertex down.
5. S:: Edge vertex right.
6. J↑ Join the first and last vertices of the wire.
7. * Pull the face lamina towards you.
8. S Sweep the square face into a very thin solid.
9. --↑ Move the face away from you giving the cube depth.
10. @/):! Rotate the cube to a more familiar position.
~λ15;JU;F.
Three commands that have not been mentioned yet are: "V"
vertex body creation, "S" sweep and "J" join two vertices with a new
edge. The "V" command takes no arguments and pushs a new body,
face and vertex into the stack. This degenerate point polyhedron
satisfies the Euler equation F-E+V=2 (1-0+1=2) and is always placed
at the world origin. The first three sweep commands in the example
sweep a vertex polyhedron into a wire polyhedron by adding a new
vertex and a new edge (incidentally preserving Euler's equation as do
all GEOMED commands). The wire-sweep takes a vertex argument
from the stack, and returns the new vertex to the stack.
The new vertex has the same locus as the
argument vertex. After three sides of a square have been formed, the
"J" command creates a new face and a new edge between the first and
last vertex of the wire face. The wire-join case of the "J" command
takes a vertex argument and identifies it as the end of a wire and
knows enough to fetch the other end of that wire, as its second
argument.
1.17 Making a Solid of Rotation.
A solid of rotation can be made by sweeping a wire face
around and closing it with the "R" command. For example a dumbbell
shaped object is formed by typing the following commands:~λ5;JA;F.
1. V(((((: Get Vertex to starting position.
2. S:)S)S;)S)))) Lower bell.
3. S:)S)S;)↑ Upper Bell.
4. 7@S(R!↑ Rotate wire about Y-axis and complete solid.
~λ15;JU;L375,500;*CUBE.PLT;L250,-300;*DUMBEL.PLT;F.
1.18 Text Commands of GEOMED 1973.
Towards the end of 1973, text nodes and text commands were
added to GEOMED to demonstrate its potential value for mechanical
drawing. This work was done by Tovar Mock, and the
resulting alternate version of GEOMED is available on the system as
the program named "G".
Text nodes are created (or edited) by applying the "T"
command with a vertex in the top of stack.
The header of a text node list is called a Y-node
and can be reached from a text node by the "≤" command; Y-nodes carry
their own 3-D space locus and so can be moved about using the
Euclidean transformation. The resulting data structures can only be
saved and restored by means of the "εO" and "εI" commands, which
dump and restore D3D files. The D3D format
I/O doesn't exist in present GEOMED. The "T"
command accepts text by means of an editor resembling the system's
editors TV and E, which use the system line edit commands. The
particular line edit mode commands of G are:
<CR> Forward 1 line
<VT> Backward 1 line
αε> Forward 4 lines
αε< Backward 4 lines
αε≥ Forward 16 lines
αε≤ Backward 16 lines
εD Delete a line
εI Enter line insert mode
αZ Concatenate next line with current line
αεE Return to GEOMED
αεV Update display
αε/ Shrink character size.
αε\ Expand character size.
The best way to get a labeled drawing into hardcopy is to "P"
plot it out of G into a plot file, ".PLT"; and then to use PLTVEC to
output the drawing on the Calcomp Plotter or to use XAP to output
the drawing to the XGP, Xerox Graphics Printer. See section 5.2,
for details on how to make hardcopy drawings.
~I0,0;P7;λ13;FA
~JC;FA SECTION 2
~JC;FBEXAMPLES
~JU;FA
The examples can be used as exercises in two ways: the
energetic reader can glance at the figures and attempt to reproduce
the results on his own; the casual reader can copy the answers into
the computer and follow the action a step at a time. In either event,
one should look at sections 3 through 7 for
commands that have not yet been explained.
~JAF.
2.1 Jack.
XCUB 2 2 2
\\FF >S* >S* >S* >S* >S* >S* B
2.2.1 Torus.
V:@ First Vertex.
S*S*S* Seven more vertices.
S*S*S*S*
J↑ Form Lamina.
!\\: Position the lamina.
@S)S)S)S) Sweep the face around the Y-axis.
S)S)S)S)
↓>G↑ Glue the ends of the torus together.
2.2.2 Torus using iterated sweeps.
V:7@S*J Make lamina.
!↑8/:\@S) Sweep lamina into ring.
↓>G↑! Glue the ends.
~H2;
L315, 350;X0.5;*JACK.PLT;
L315, -100;X0.5;*TORUS.PLT;
L315,-550;X0.5;*TORUS.PLT;
F.
2.3 Soma Cubes
~JUF. An introduction to both Soma Cubes and the Platonic solids can
be found in Martin Gardner's Second Book of Mathematical Puzzles and Diversions,
Simon and Schuster, New York, 1961. The objects are shown rotationally displaced
from the position in which they are constructed. If you do one object after another,
then the "FF" should not be repeated.
~JA;X0.7;F.
FFXCUB 1 1 1 ~*SOMA1.PLT;F.
>S*>>S*BNSOMA1
FFXCUB 1 1 1 ~*SOMA2.PLT;F.
>S*S*>>S*BNSOMA2
FFXCUB 1 1 1 ~*SOMA3.PLT;F.
>S* >S* >S*BNSOMA3
FFXCUB 1 1 1 ~*SOMA4.PLT;F.
<S* <S*↓≥.+↑ S*BNSOMA4
FFXCUB 1 1 1 ~*SOMA5.PLT;F.
>>S*>>>>S*↓≥.+↑S*BNSOMA5
FFXCUB 1 1 1 ~*SOMA6.PLT;F.
>>S*>>>>S*↓≥.+↑S*ε;¬BNSOMA6
FFXCUB 1 1 1 ~*SOMA7.PLT;F.
<S*<<<S*<S*BNSOMA7
2.4 The Platonic Solids.
Regular Tetrahedron, edge length of SQRT(2).
XCUB 1 1 1
∧↓∧∧↓B ∨↓∨∨ Push opposing vertices into the stack,
SK↑SK↑SK↑KB Lop off the opposing vertices.
Another Regular Tetrahedron, edge length of SQRT(3).
XCYL 6 3 6*1.414 Three sided cylinder
>KB Pyramid one of the ends.
Regular Hexahedron, edge length of 1.
XCUB 1 1 1 Very easy.
Regular Octahedron, edge length of SQRT(1/2).
XCUB 1 1 1
βD Face-Vertex Dual of a cube
Regular Icosahedron, edge length of 6*SIN(π/5).
Xcyl 3 5 0 Pentagonal lamina
λ.507*3
>*XPRISM Prismoid face sweep
--ππ/5
α*λ.618*3 Reciprocal of golden mean.
↓>αs*↑αs-B
Regular Dodecahedron, edge length of 6/PHI.
(after Euclid's classical construction:
Elements, Book XIII, Proposition 17).
XCUB 6 6 6 Start with a cibe.
β5λ3 Midpoint DDEL, Mid edge TDEL.
≥≥S:↔B≤≤≤≤≤ Edge swweps to midface.
S:↔≤S(↔↓M↔
≤≤↓M↔≤≤S)α↑
↓M↔≤Mα↑Jβ↔J Join the two pairs of midpoints
%61.8034 Reciprocal of the golden mean, PHI.
λ0.309017*6 SQRT(PHI↑2 - 1/4 - (1-PHI/2)↑2)
β;)↑β-;↑β(-↑ Shrink and translate the six new edges.
β(*↑β-:↑β;(B
~H0;
L-315,600;*P1.PLT;
L315,300;*P2.PLT;
L-315,000;*P3.PLT;
L315,-300;*P4.PLT;
L-315,-600;*P5.PLT;FA
2.5 A Knot.
The knot was developed by visualizing
the connection of three non-parallel and non-coplanar
edges of a cube, as in the second knot figure.
XCYL 1 8 6 Straight section.
λ6
Q;/->>λ1
Sα))Sα))Sα)) Three quarters of a turn.
Sα))Sα))Sα))Bλ3
*:(@9C Symetry on a cube
:-C-(!
>↓>α↓ Fetch three pairs of faces.
>↓>α↓
>↓>α↓
G↑G↑G Glue the pairs of faces.
2.6 An Odd Shaped Block (illustrating kill commands).
XCUB 3 2 1
%100/3
≥↓≥≥
M↔↓>↔M
E(E:↔↑J<S*B
≥↓≥↓↓∨..
↔K↑
↔K↑K↑↓∨↔K↑KB
αV12
SKB$
2.7 Yet Another Torus.
V\:ππ/9
9@S*!/S;S)))
S::::::S(((J↑
-S**>>↓>>>>9@S*!
G↑$
~H2;
H2;X0.5;L+340,600;*KNOT1.PLT;
H0;X0.5;L+340,200;*KNOT2.PLT;
H2;X0.5;L+340,-200;*BLK1.PLT;
H2;X0.5;L+340,-600;*BLK2.PLT;F.
2.8 The Pulgas Water Temple.
~JU;F. Ten miles north of Stanford,
the Pulgas Water Temple marks the termination of an
aqueduct that brings water from the Sierra Nevada to San Francisco.
This example illustrates how a complicated object is built up of simple polyhedra.
~JA;F.
Base of Temple.
V:λ5 Foundation of temple.
S:λ0.2
S)S;;S)S;;S)Sλ3 Jaggies forming steps.
;↑π40` Set RDEL to 40 degrees.
8@S)R↑¬λ3.61 Sweep out a solid of rotation.
!(
Top of Temple.
!Vλ0.6
:S)))S;;S(((J Make rectangular lamina
↑λ3.5
:π40`
9@S)↓>G↑/) Sweep lamina.
!λ2.72
)
Columns of Temple.
XCYL 0.5 9 6 Make first column,
@9:!λ3.5 position column.
>Aβ9β(<:π20` Taper the top of the column.
Q@)\
C)C)C)C) Make eight copies of the column,
C)C)C)C)
~X0.4;H0;
L350,550;*PULGA1.PLT;
L350,200;*PULGA2.PLT;
L350,-150;*PULGA3.PLT;
H2;X0.6;L0,-615;*PULGA5.PLT;JU;FA
2.9 Cross-Eyed Stereo Pairs.
Models may be viewed as a stereo pair by creating an
additional camera and display window; this is done automatically
by using the "β∞" macro. Although stereo pair prisms are
available and can be used to view the display screen, the stereo
macro command swaps the usual left and right images so that the
depth may be seen by looking at the screen cross-eyed as is
illustrated by the Siamese cat below. That is in order to see stereo
depth, look at the display cross-eyed so that you can see
three windows; next, concentrate on focusing on the middle window.
With practice the displayed objects can be seen in depth at a glance
with no special equipment, which is a great help in positioning
things.
~H2;
L0,290;X0.6;*CAT.PLT;
L0,-250;X1.0;*STEREO.PLT;
L0,-700;X1.0;*STERE2.PLT;FA
2.10 Video Synthesis.
The "βO" command will do a hidden line elimination and output
a 2-D vector based image format, V2D file, which in turn is suitable
input to a program called MKVID. MKVID creates, shades, colors,
and dejaggies television pictures. The only online video hardcopy device
is the Xerox Graphics Printer. A quick, but low quality XGP video
image (such as the one below of the star ship Enterprise) is obtained
by typing "R XIP;L0,0;*<FILENAME>" or "R XAP;L0,0;*<FILENAME>" to the
monitor. XIP and XAP are underground Xerox formatting programs.
~L0,0;*SHIP.VID;FA
~λ13;P14;JUFA
2.11 Video Derived Polyhedra.
~JU;FA One way to make a polyhedron from a video image is to
sweep the silhouette of an intensity contour from the program
CRE (a video
contouring program). The CRE commands "T" for take, "C" for contour
and "αO" for output contoured image will yield a disk file suitable
for input to GEOMED. Using GEOMED commands: "βI" will input a CRE
file and create a face, edge, vertex data structure on the now camera
node that corresponds to the contoured image;
~JA;FA
0. TC10αOHAND.CRE CRE Commands to take, contour and output.
1. βIHAND.CRE GEOMED input from CRE file.
2. αC... Locate a suitable contour body node.
3. XSIL <ZMIN> <ZMAX> Sweep out silhouette polyhedron.
~L0,-200;JUFA
The CRE program is documented in Stanford A.I. Memo #199, titled
`Image Contouring and Comparing', by Baumgart.
A more elaborate example of video assisted drawing is demonstrated by
the water pump below; the shape of the base and the holes in the
base were derived from a video image.
~L0,75;H2;X0.6;*HAND.PLT;
L0,-600;H2;X0.6;*PUMP.PLT;
FA
~I0,0;λ13;FA
~JC;FA SECTION 3
~JC;FBGEOMETRIC COMMANDS
~JAFA
3.1 EUCLIDEAN TRANSFORMATION KEYS.
Translation, α Rotation, β Dilation, ε Reflection.
";" Transform Minus X-Axis. ":" ...Plus X-Axis.
"(" Transform Minus Y-Axis. ")" ...Plus Y-Axis.
"-" Transform Minus Z-Axis. "*" ...Plus Z-Axis.
"!" Translation Default. "@" Rotation Default.
3.2 STRENGTHS OF TRANSFORMATION.
3.2.1 "/" Halve a Transformation Strength.
"\" Double a Transformation Strength.
3.2.2 "λ<expr>" Set Translation Strength, TDEL.
"π<expr>" Set Rotation Strength, RDEL.
"%<expr>" Set Dilation Strength, DDEL.
3.2.3 "<digit>" Set Transform Strength Immediate.
3.3 EUCLIDEAN SWITCHES.
3.3.1 "F" Step Frame Switch Forwards.
"βF" Step Frame Switch Backwards.
3.3.2 "Q" Toggle Frame Origin Switch.
3.3.3 "βA" Step Axis Counter.
3.3.4 "∀" Enable All Body Motions.
"α∀" Disable Frame Motion.
"β∀" Disable Vertex Motion.
"ε∀" Disable Parts Motion.
3.4 THE ITERATION COUNTER.
"<digit>" Accumulate Iteration Count.
"<return>" Reset Iteration Count to Zero.
3.5 DIRECT EUCLIDEAN COMMANDS.
3.5.1 "U" Unmove a Body.
3.5.2 "X PLACE <X> <Y> <Z>"
3.5.3 "X ORIENT <PAN> <TILT> <SWING>"
3.1 EUCLIDEAN TRANSFORMATIONS.
~JA;FA
Translation, α Rotation, β Dilation, ε Reflection.
";" Transform Minus X-Axis. ":" ...Plus X-Axis.
"(" Transform Minus Y-Axis. ")" ...Plus Y-Axis.
"-" Transform Minus Z-Axis. "*" ...Plus Z-Axis.
"!" Translation Default. "@" Rotation Default.
~JUFA The Euclidean geometric transformations are translation,
rotation, dilation and reflection. The entity in the top of the stack
is transformed by typing one of the six characters: colon, semicolon,
left parenthesis, right parenthesis, minus sign or asterisk. The
characters colon, left parenthesis and minus sign transform the
object in the negative direction with respect to the X, the Y,
and the Z axes respectively. The characters semicolon, right
parenthesis and asterisk transform the object in the positive
direction with respect to the X, the Y, and the Z axes
respectively. The particular transformation is selected by keying the
control bits: none, control, meta and meta-control which
respectively select translation, rotation, dilation and reflection.
Finally, the no-control-bits case can be forced to be rotation by the
"@" rotation default command, or translation by the "!" translation
default command.
Translation moves the top entity in the stack in the
direction specified by one unit of translation strength, TDEL.
Rotation rotates the entity about the axis specified by one unit of
rotational strength, RDEL. Positive rotations are counter clockwise
and negative rotations are clockwise.
Dilations and reflections refer to a three axis count
selector. State 1 causes dilation (reflection) to be done on the
specified axis, dilation state 2 causes dilation (reflection) on the
two axes not indicated, and state 3 causes dilation (relfection) on
all the axes. The axis count selector is advanced by typing "βA". The
state of the selector is displayed as a digit 1, 2 or 3 just to the
right of the dilation strength's per cent sign in the editor status
in the upper right of the display screen.
When the dilation strength, DDEL, is less than 100% a
positive dilation will scale the entity by 1/DDEL and a negative
dilation will scale the entity by DDEL. Positive and negative keyings
make no difference in the execution of a reflection.
3.2 STRENGTHS OF TRANSFORMATION.
3.2.1 "/" Halve a Transformation Strength.
"\" Double a Transformation Strength.
The strength of a Euclidean transformation can be halved or
doubled by keying the transform's control bits and by striking slash
or back slash respectively.
~JAFA
3.2.2 "λ<real expression>" Set Translation Strength, TDEL.
"π<real expression>" Set Rotation Strength, RDEL.
"%<real expression>" Set Dilation Strength, DDEL.
~JUFA The strengths of the Euclidean transformations can be entered
numerically by typing "λ", "π" or "%" followed by an arithmetic
expression of numerical constants. The simple expression scanner can
take "+", "-", "*", "/" and parenthesis in the usual precedence
order; the scanner also evaluates the pi character, "π", to
3.1415927; numbers suffixed with the inch mark double quote (") are
divided by twelve; numbers suffixed with a left single quote (`) are
multiplied by 1.745329E-2 which converts degrees into radians.
3.2.3 "<digits>" Set Transform Strength Immediate.
The strength of a Euclidean transformation can be set by
keying the Transform's control bits and by striking a digit from zero
to nine. Keying "ε<digit>" sets the strength of translation; a digit
without meta-control bits contributes to the iteration count. For
Translation: "ε0" sets TDEL to 1/16 of a foot, "ε4" sets TDEL to one
Foot, and "ε9" sets TDEL to 32 Feet. That is, ε<digit> sets TDEL to
2.0↑(<digit>-4) feet. For Rotation: "α9" sets RDEL to π/2, "α8" sets
RDEL to π/4, and so on by halves.
For Dilation: "β1" sets DDEL to 10%, "β2"
sets DDEL to 20% and so on.
3.3 EUCLIDEAN SWITCHES.
~JAFA
3.3.1 "F" Step frame switch forwards.
"βF" Step frame switch backwards.
~JUFA There are four frames of reference: world frame, body frame,
relative frame and camera frame. The world frame is that in which all
coordinates are stored; the world frame is the natural direct frame
of reference, all the other frames being represented in world frame
coordinates by a frame node which contains the origin location and
axes orientation of secondary frames. In particular, each body and
camera has a frame node, which determine a camera or a body frame of
reference that translates and rotates when Euclidean transformations
are applied to that body or camera. The relative frame mode is a
catch all; when a body is in the top of the stack, its relative frame
is that of the body of which it is a part; when a face is in the top
of the stack, its relative frame is a special face frame with Z-axis
parallel to the face's outward pointing normal. The "F" command steps
the frame switch selector forwards, "βF" steps the frame switch
selector backwards. The state of the frame switch selector is
displayed in the status in the upper right of the display screen.
3.3.2 "Q" Toggle Frame Origin Switch.
Euclidean transformations in world frame can be done with
repect to the world origin or with repect to the origin of the entity
being transformed depending on the state of the FRMORG switch. In
particular, FRMORG affects world frame rotations: FRMORG true causes
rotation about a world axis thru the world origin; FRMORG false
causes rotation about an axis parallel to a world axis, but passing
thru the body origin. The FRMORG switch is flipped by the "Q"
command. The state of FRMORG is indicated by an asterisk in the
status display; the asterisk is present when FRMORG is true and
absent when FRMORG is false.
3.3.3 "βA" Step Axis Counter.
The three-state switch named AXECNT affects dilations and
reflections. State #1 indicates dilation (reflection) only on the
specified axis. State #2 indicates dilation (reflection) on the two
axes not specified. State #3 indicates dilation (reflection) on all
three axes. The state of the AXECNT switch is indicated by a digit to
the right of the dilation strength's percent sign in the status
display. AXECNT is cycled forward by the "βA" command.
~JAFA
3.3.4 "∀" Enable All Body Motions.
"α∀" Disable Frame Motion.
"β∀" Disable Vertex Motion.
"ε∀" Disable Parts Motion.
~JUFA Applying a Euclidean transformation to a body means applying
the tranform to the vertices, frame and parts of that body. Each of
these three phases of body transformation can be individually
disabled by the "∀" command with the appropriate combination of
meta-control bits. With no meta-control bits, the "∀" command resets
all the body disable bits. Transforming a fully disabled body is a
no-operation.
~JAFA
3.4 THE ITERATION COUNTER.
"<digit>" Accumulate Iteration Count.
"<return>" Reset Iteration Count to Zero.
~JUFA Digits typed without control keys are accumulated into an
iteration counter. The iteration count is cleared by typing a
carriage return. The count applies to Euclidean
transformations and sweeps. The ability to iterate and
to do macros is not developed because of the existence of GEOMED
imbedded in LISP which provides better interactive programming
facilities than would be possible under the present character command
scanner. (It is my design philosophy
that interactive geometric editing can in fact be kept distinct from interactive
programming).
3.5 DIRECT EUCLIDEAN COMMANDS.
3.5.1 "U" Unmove a Body.
This command applies the inverse of the given body's frame of
reference to the body itself. This has the effect of undoing any
translations and rotations that have been applied to the body; that
is the body's frame is brought back to be coincident with the world
frame of reference. Thus a polyhedral body can be constructed in a
standard orientation; then rotated randomly for inspection; and then
be brought back to its original orientation for further editing.
3.5.2 "X PLACE <X> <Y> <Z>"
The location of the body, camera or vertex in the top of the
stack is placed at the given world coordinates.
3.5.3 "X ORIENT <pan> <tilt> <swing>"
The orientation of the given body or camera is set to the
specified values.